#pragma once
#include <Dynamics/Boundary/fixed_freedom_cpu.h>

namespace PhysLeo
{
   
/**
 * fixed freedom gpu module
 */
template<typename T>
class FixedFreedomCuda : public FixedFreedomCpu<T>
{
public:
    /**
    * empty constructor
    */
    FixedFreedomCuda() = default;

    /**
    * virtual destructor
    */
    virtual ~FixedFreedomCuda() = default;

    /**
    * set the fixed Freedom of vec to zeros
    * @param vec  shared_ptr to vector buffer data which need to be set to zero on some positions
    */
    void clearFixedFreedom(std::shared_ptr<BufferData<glm::tvec3<T>>> vec) override;

    /**
    * set specific value for the fixed Freedom of vec
    * @param vec  shared_ptr to vector buffer data which need to be set to zero on some positions
    * @param value  shared_ptr to value buffer data which stores the target value of fixed freedoms
    */
    void setFixedFreedom(std::shared_ptr<BufferData<glm::tvec3<T>>> vec, std::shared_ptr<BufferData<T>> value) override;
};

}
